home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / dev / gui / DesignerV1_53.lha / Designer / MultipleDemo / MultipleDemo.s < prev    next >
Text File  |  1995-04-28  |  7KB  |  316 lines

  1. ; Compile me to get full executable
  2.  
  3.     include    multipledemoasm.i
  4.  
  5. GT_ReplyIMsg             EQU    -78
  6. GT_GetIMsg               EQU    -72
  7. WaitPort                 EQU    -384
  8. ItemAddress              EQU    -144
  9. GT_BeginRefresh          EQU    -90
  10. GT_EndRefresh            EQU    -96
  11. CloseScreen              EQU    -66
  12. CreateMsgPort            EQU    -666
  13. DeleteMsgPort            EQU    -672
  14. AllocVec                 EQU    -684
  15. FreeVec                  EQU    -690
  16. AddTail                  EQU    -246
  17. RemHead                  EQU    -258
  18. Remove                   EQU    -252
  19. GT_SetGadgetAttrs        EQU    -42
  20. FreeMenus                EQU    -54
  21.  
  22. start
  23.  
  24.     jsr     OpenLibs
  25.     tst.l   d0
  26.     bne     NoLibs
  27.     jsr     OpenDiskFonts
  28.     movea.l _SysBase,a6
  29.     jsr     CreateMsgPort(a6)
  30.     tst.l   d0
  31.     beq     NoMsgPort
  32.     move.l  d0,MsgPort
  33.     jsr     OpenOne
  34.     tst.l   d0
  35.     bne     NoWindow
  36. WaitHere:
  37.     move.l  MsgPort,a0
  38.     move.l  _SysBase,a6
  39.     jsr     WaitPort(a6)
  40. GetMessage:
  41.     move.l  MsgPort,a0
  42.     move.l  _GadToolsBase,a6
  43.     jsr     GT_GetIMsg(a6)
  44.     tst.l   d0
  45.     beq     WaitHere
  46.     move.l  d0,a1
  47.     move.l  20(a1),d2
  48.     move.w  24(a1),d3
  49.     move.l  28(a1),a4
  50.     move.l  20(a1),d4
  51.     move.l  44(a1),a3
  52.     
  53.     move.l  _GadToolsBase,a6
  54.     jsr     GT_ReplyIMsg(a6)
  55.  
  56.     move.l  d2,d0
  57.     move.w  d3,d1
  58.     move.l  a4,a0
  59.     
  60.     jsr     ProcessWindow
  61.     
  62.     cmpi.l  #0,SizeOfList
  63.     beq     Done
  64.     
  65.     jmp     GetMessage
  66.  
  67. Done:
  68.     movea.l CommonMenu,a0
  69.     move.l  a0,d0
  70.     tst.l   d0
  71.     beq     NoWindow
  72.     movea.l _GadToolsBase,a6
  73.     jsr     FreeMenus(a6)
  74. NoWindow:
  75.     movea.l MsgPort,a0
  76.     movea.l _SysBase,a6
  77.     jsr     DeleteMsgPort(a6)
  78. NoMsgPort:
  79.     jsr     CloseLibs
  80. NoLibs:
  81.     rts
  82.  
  83.  
  84. CommonMenuSubItemNumber:
  85.     dc.w    0
  86. CommonMenuItemNumber:
  87.     dc.w    0
  88. CommonMenuItem:
  89.     dc.l    0
  90.  
  91. ProcessMenuIDCMPCommonMenu:
  92.     movem.l d1-d4/a0-a4/a6,-(sp)
  93. CommonMenuHandleLoop:
  94.     move.l  #0,d5
  95.     move.w  d0,d5
  96.     move.l  d5,d0
  97.     movea.l CommonMenu,a0
  98.     movea.l _IntuitionBase,a6
  99.     jsr     ItemAddress(a6)
  100.     move.l  d0,CommonMenuItem
  101.     tst.l   d0
  102.     beq     CommonMenuFinished
  103.     move.l  d5,d0
  104.     lsr     #5,d0
  105.     lsr     #6,d0
  106.     and.w   #31,d0
  107.     move.w  d0,CommonMenuSubItemNumber
  108.     move.w  d5,d0
  109.     lsr     #5,d0
  110.     and.w   #63,d0
  111.     move.w  d0,CommonMenuItemNumber
  112.     move.w  d5,d0
  113.     and.w   #31,d0
  114.     cmp.w   #31,d0
  115.     bne     NoCommonMenuMenu
  116.     jmp     CommonMenuItemDone
  117. NoCommonMenuMenu:
  118.     cmp.w   #CommonMenu_Options,d0
  119.     bne     NotCommonMenu_Options
  120.     move.w  CommonMenuItemNumber,d0
  121.     cmp.w   #CommonMenu_Options_Item0,d0
  122.     bne     NotCommonMenu_Options_Item0
  123.  
  124. MenuOneLoop:              ; Must be at least one so this is safe
  125.     movea.l Head,a0
  126.     movea.l (a0),a0    
  127.     move.l  (a0),d0
  128.     tst.l   d0
  129.     beq     MenuOneDone
  130.     jsr     CloseOne
  131.     jmp     MenuOneLoop
  132. MenuOneDone:
  133.     
  134.     jmp     CommonMenuItemDone
  135. NotCommonMenu_Options_Item0:
  136.     cmp.w   #CommonMenu_Options_Item2,d0
  137.     bne     NotCommonMenu_Options_Item2
  138.     
  139. MenuQuitLoop:
  140.     movea.l Head,a0
  141.     move.l  (a0),d0
  142.     tst.l   d0
  143.     beq     MenuQuitDone
  144.     jsr     CloseOne
  145.     jmp     MenuQuitLoop
  146. MenuQuitDone:
  147.  
  148.     jmp     CommonMenuItemDone
  149. NotCommonMenu_Options_Item2:
  150.     jmp     CommonMenuItemDone
  151. NotCommonMenu_Options:
  152.  
  153. CommonMenuItemDone:
  154.  
  155.     movea.l CommonMenuItem,a0
  156.     move.w  32(a0),d0
  157.     jmp     CommonMenuHandleLoop
  158.  
  159. CommonMenuFinished:
  160.     movem.l (sp)+,d1-d4/a0-a4/a6
  161.     rts
  162.  
  163. ProcessWindow:                       ; a3 =  idcmp_window
  164.     movem.l d1-d4/a0-a6,-(sp)
  165.     move.l  120(a3),a2               ; node in a2
  166.     cmp.l   #$40,d0
  167.     bne     NotGADGETUP
  168.     move.w  38(a0),d0
  169.     cmp.w   #GD_CommonWin_Gad0,d0
  170.     bne     NotCommonWin_Gad0Up
  171.     jsr     OpenOne
  172.     jmp     winDoneMessage
  173. NotCommonWin_Gad0Up:
  174.     cmp.w   #GD_CommonWin_Gad1,d0
  175.     bne     NotCommonWin_Gad1Up
  176.     jsr     OpenOne
  177.     jsr     OpenOne
  178.     jsr     OpenOne
  179.     jsr     OpenOne
  180.     jsr     OpenOne
  181.     jmp     winDoneMessage
  182. NotCommonWin_Gad1Up:
  183.     jmp     winDoneMessage
  184. NotGADGETUP:
  185.     cmp.l   #$200,d0
  186.     bne     NotCLOSEWINDOW
  187.     movea.l a2,a0
  188.     jsr     CloseOne
  189.     jmp     winDoneMessage
  190. NotCLOSEWINDOW:
  191.     cmp.l   #$100,d0
  192.     bne     NotMENUPICK
  193.     move.l  d1,d0
  194.     jsr     ProcessMenuIDCMPCommonMenu
  195.     jmp     winDoneMessage
  196. NotMENUPICK:
  197.     cmp.l   #4,d0
  198.     bne     NotREFRESHWINDOW
  199.     movea.l 8(a2),a0
  200.     movea.l _GadToolsBase,a6
  201.     jsr     GT_BeginRefresh(a6)
  202.     move.l  #1,d0
  203.     movea.l 8(a2),a0
  204.     jsr     GT_EndRefresh(a6)
  205.     jmp     winDoneMessage
  206. NotREFRESHWINDOW:
  207. winDoneMessage:
  208.     movem.l (sp)+,d1-d4/a0-a6
  209.     rts
  210.     
  211. OpenOne:
  212.     move.l  #28,d0
  213.     move.l  #0,d1
  214.     movea.l _SysBase,a6
  215.     jsr     AllocVec(a6)
  216.     tst.l   d0
  217.     beq     CouldNotAllocNode
  218.     movea.l d0,a4
  219.     movea.l MsgPort,a0
  220.     move.l  #0,WinNode
  221.     move.l  #0,WinNodeGList
  222.     move.l  #0,WinNodeVisualInfo
  223.     jsr     OpenWinNodeWindow
  224.     tst.l   d0
  225.     bne     OpenOneNoWindow
  226.     movea.l WinNode,a1
  227.     move.l  a4,120(a1)
  228.     move.l  WinNode,8(a4)
  229.     move.l  WinNodeGList,12(a4)
  230.     move.l  WinNodeVisualInfo,16(a4)
  231.     move.l  WinNodeDrawInfo,24(a4)
  232.     lea.l   WinNodeGadgets,a0
  233.     move.l  #CommonWin_Gad2,d0
  234.     mulu    #4,d0
  235.     adda.l  d0,a0
  236.     move.l  (a0),20(a4)
  237.     lea.l   List,a0
  238.     movea.l a4,a1
  239.     movea.l _SysBase,a6
  240.     jsr     AddTail(a6)
  241.     add.l   #1,SizeOfList
  242.     jsr     NumberWindows
  243.     move.l  #0,d0
  244. OpenOneDone:
  245.     rts    
  246. OpenOneNoWindow:
  247.     movea.l a4,a1
  248.     movea.l _SysBase,a6
  249.     jsr     FreeVec
  250. CouldNotAllocNode:
  251.     move.l  #1,d0
  252.     jmp     OpenOneDone
  253.     
  254. CloseOne:            ; WindowNode in a0
  255.     movea.l a0,a1
  256.     movea.l a1,a4
  257.     movea.l _SysBase,a6
  258.     jsr     Remove(a6) 
  259.     sub.l   #1,SizeOfList
  260.     move.l  8(a4),WinNode
  261.     move.l  12(a4),WinNodeGList
  262.     move.l  16(a4),WinNodeVisualInfo
  263.     move.l  24(a4),WinNodeDrawInfo
  264.     jsr     CloseWinNodeWindow
  265.     move.l  a4,a1
  266.     jsr     FreeVec(a6)
  267.     jsr     NumberWindows
  268.     rts
  269.  
  270. NumberWindows:
  271.     move.l  #0,d3
  272.     movea.l Head,a4
  273. NumberLoop:
  274.     movea.l (a4),a5
  275.     move.l  a5,d0
  276.     tst.l   d0
  277.     beq     NumberDone
  278.     move.l  d3,tags+4
  279.     movea.l 8(a4),a1
  280.     movea.l 20(a4),a0
  281.     movea.l #0,a2
  282.     lea     tags,a3
  283.     movea.l _GadToolsBase,a6
  284.     jsr     GT_SetGadgetAttrs(a6)
  285.     movea.l a5,a4
  286.     add.l   #1,d3
  287.     jmp     NumberLoop
  288. NumberDone:
  289.     rts
  290.  
  291. tags:
  292.     dc.l    $8008000D,0,0           ;GTNM_Number
  293.  
  294. List:
  295. Head:
  296.     dc.l    Tail
  297. Tail:
  298.     dc.l    0,Head
  299.     
  300. SizeOfList:
  301.     dc.l    0
  302.  
  303. MsgPort:
  304.     dc.l    0
  305.  
  306. ; Node:
  307. ;  Succ
  308. ;  Pred
  309. ;  Win
  310. ;  GList
  311. ;  VisualInfo
  312. ;  TextGadget
  313. ;  DrawInfo
  314.  
  315.     end
  316.